package org.apache.ibatis.common.reflection.wrapper;

import org.apache.ibatis.common.reflection.MetaObject;

/**
 * @Name ObjectWrapperFactory
 * @Description: 对象（集合）包装器生产工厂接口
 * 描述信息：该接口主要用于生产对象（集合）包装器。它有一个 DefaultObjectWrapperFactory 默认实现类，不过该实现类中没有实现任何功能。
 * 提示：Mybatis 允许用户通过在全局配置文件中设置 objectWrapperFactory 节点来注入自定义的对象（集合）包装器生产工厂实现类。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-04-28 14:06:38
 **/
public interface ObjectWrapperFactory {

    /**
     * 判断工厂中是否存在对象（集合）包装器实例
     *
     * @param object 被包装的对象
     * @return boolean 结果
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-28 14:11:00
     */
    boolean hasObjectWrapperFor(Object object);

    /**
     * 从工厂中获取（或生产）一个对象（集合）包装器实例
     *
     * @param metaObject 被包装对象的元对象
     * @param object     被包装的对象
     * @return org.apache.ibatis.common.reflection.wrapper.ObjectWrapper 结果
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-28 14:11:31
     */
    ObjectWrapper getObjectWrapperFor(MetaObject metaObject, Object object);

}
